package com.delio.client.produccion.pedidos;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.produccion.clientes.Clientes;
import com.delio.client.produccion.detallepedidos.DetallePedido;
import com.delio.client.produccion.detallepedidos.DetallePedidos;
import com.delio.client.produccion.direccionclientes.DireccionClientes;
import com.delio.client.produccion.estadodetallepedidos.EstadoDetallePedidos;
import com.delio.client.produccion.estadopedidos.EstadoPedidos;
import com.delio.client.produccion.prioridades.Prioridades;
import com.delio.client.produccion.recetas.Recetas;
import com.delio.client.util.ComboboxFieldBinding;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;


public class PedidoForm extends ContentPanel{
	private DelioConstants x = GWT.create(DelioConstants.class);
	public Button btnDeleteDetallePedido,btnGuardar,btnDeletePedido;
	ToolBar toolBar,toolBar1;
	ContentPanel cpw,ctp,cpi,cpg,cpf,cpe;
	BorderLayoutData sup,inf,east,center,nor,c,cen,cg;
	TextField<String> numPedido,codigof;
	ComboBox<ModelData> direccion,cliente,epdescripcion,prdescripcion;
	TextArea observaciones,obsf;
	HiddenField<String> id,idf;
	Integer idrecf,idedpf,iddireccioncliente=null,idestadopedido,idprioridad;
	static String idcliente=null;
	String codartf;
//	final Integer iddocumento = 3; 
	private FormBinding formbinding,formbinding1;
	DateField fecha;
	FormPanel fp,f;
	private BeanModel selectedModel;
	ModelData selectedModel1;
	NumberField cantidadf;
	ComboBox<ModelData> edpedidof,recetaf;
	Grid<BeanModel> grid;
	Grid<ModelData> grid1;
	String concatPDP,codigopedido,nombredetallepedido;
	Integer ultimonumeropedido;
	
	public PedidoForm(){
		setHeaderVisible(false);
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
        //DireccionClientes.listardireccioncliente();
        //DireccionClientes.listardireccionclienteCombo();
        DireccionClientes.listardireccioncliente();
  	    EstadoDetallePedidos.listarestadodetallepedidos();
		EstadoPedidos.listarestadopedidos();
		Prioridades.listarprioridades();
		Clientes.getStore();
		Pedidos.getPaginate();
	    DetallePedidos.getPaginate();
	    Recetas.getStore();
       	formulario();
       	Form();
	    cpw = new ContentPanel();
	    cpw.setHeading("Editar Pedido");
	    cpw.setIconStyle("images/icons/people.png");
	    sup = new BorderLayoutData(LayoutRegion.NORTH);
	    sup.setMargins(new Margins(0,3,3,3));
	    
        inf = new BorderLayoutData(LayoutRegion.SOUTH);
        inf.setMargins(new Margins(0,3,0,0));

	    cpw.add(fp,sup);
	    	   	    
	    cpe = new ContentPanel();
	    cpe.setHeaderVisible(false);
	    cpe.setLayout(new BorderLayout());
	       
	    cpf = new ContentPanel();
	    cpf.setHeading("Editar Detalle Pedido");
	    cpf.setIconStyle("images/icons/people.png"); 
	    cpf.add(f,inf);
	    cpf.setLayout(new FitLayout());
	   
        east = new BorderLayoutData(LayoutRegion.EAST,350);
	    east.setMargins(new Margins(0));
	    east.setSplit(true);
	    east.setCollapsible(true);
	    
	    center  = new BorderLayoutData(LayoutRegion.CENTER);
	    center.setMargins(new Margins(0));
	    center.setCollapsible(true);
	    
	    ctp = new ContentPanel();
	    ctp.setHeaderVisible(false);
	    ctp.setLayout(new BorderLayout());
		 	    
		nor  = new BorderLayoutData(LayoutRegion.NORTH,300);
		nor.setMargins(new Margins(0,3,3,3));
		 
		cpi = new ContentPanel();
		cpi.setHeading("Listado de Pedidos");
		cpi.setIconStyle("images/icons/table.png");
		cpi.setLayout(new BorderLayout());
		  
		c = new BorderLayoutData(LayoutRegion.CENTER);
		 		    
		cen   = new BorderLayoutData(LayoutRegion.CENTER);
		cen.setMargins(new Margins(3));
		    
		cpg = new ContentPanel();
		cpg.setHeading("Listado de Insumos del Pedido");
		cpg.setIconStyle("images/icons/table.png");
		cpg.setLayout(new BorderLayout());
			
	 	cg = new BorderLayoutData(LayoutRegion.CENTER,100);
		    
	    final PagingToolBar toolBarPag = new PagingToolBar(10);
        toolBarPag.bind(Pedidos.loader);
        
        List<ColumnConfig> conf = new ArrayList<ColumnConfig>();
        CheckBoxSelectionModel<BeanModel> sm = new CheckBoxSelectionModel<BeanModel>();
    
        conf.add(sm.getColumn()); 
        ColumnConfig col  = new ColumnConfig("nropedido",x.codigopedido(),100);
	    conf.add(col);
	    col  = new ColumnConfig("razonsocial",x.clientepedido(),100);
	    conf.add(col);
	    col  = new ColumnConfig("direccion",x.direccioncliente(),100);
	    conf.add(col);
	    col  = new ColumnConfig("ruc",x.ruc(),100);
	    conf.add(col);
	    col  = new ColumnConfig("fecha",x.fecha(),100);
	    conf.add(col);
	    col  = new ColumnConfig("epdescripcion",x.descripcion(),100);
	    conf.add(col);
	    col  = new ColumnConfig("observaciones",x.observacion(),100);
	    conf.add(col);
	    col  = new ColumnConfig("prdescripcion",x.prioridad(),100);
	    conf.add(col);
	    
	    final ColumnModel cm = new ColumnModel(conf);
	    
	    grid = new Grid<BeanModel>(Pedidos.store, cm);  
        grid.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {  
          public void handleEvent(GridEvent<BeanModel> be) {  
        	  Pedidos.loader.load(0, 10);  
          }  
        }); 
        sm.setSelectionMode(SelectionMode.SINGLE);
        grid.setSelectionModel(sm);
        grid.getSelectionModel().addListener(Events.SelectionChange,
           new Listener<SelectionChangedEvent<BeanModel>>() {
			@Override
			public void handleEvent(SelectionChangedEvent<BeanModel> be) {		
    		   if(be.getSelection().size() == 1) {
	             formbinding.bind((BeanModel) be.getSelection().get(0));
	             selectedModel = be.getSelectedItem();
	             DireccionClientes.loaderDireccionCliente.load();
	            
	             if(iddireccioncliente!=null){
	                DireccionClientes.loaderDireccionClienteCombo.load();
	             } 	 
	             DetallePedidos.pedido_id = Integer.parseInt(selectedModel.get("id").toString());
                 ultimonumeropedido = Integer.parseInt(be.getSelection().get(0).get("ultimonumero").toString());
                 codigopedido = selectedModel.get("nropedido").toString();
                 
                 DetallePedidos.loader.load();
	             btnDeletePedido.setEnabled(true); 
	           }
    		   if(be.getSelection().size()==0){
    			 DetallePedidos.store.removeAll();
    			 btnDeletePedido.setEnabled(false);
    	       /*clearForm();*/
                 formbinding.unbind();
               }
    			if(be.getSelection().size()>1){
       			 btnDeletePedido.setEnabled(false);
    			 formbinding.unbind();
    		   }
			}
          });
        
        grid.setLoadMask(true);  
        grid.setBorders(true);       
        GridFilters filters = new GridFilters();
        StringFilter clienteFilter = new StringFilter("cliente");        
        StringFilter direccionclienteFilter = new StringFilter("direccioncliente");
        StringFilter nropedidoFilter = new StringFilter("nropedido");
        StringFilter fechaFilter = new StringFilter("fecha");
        StringFilter estadopedidoFilter = new StringFilter("epdescripcion");
        StringFilter observacionesFilter = new StringFilter("observaciones");
        StringFilter prioridadFilter = new StringFilter("prdescripcion");
          
        filters.addFilter(clienteFilter);        
        filters.addFilter(direccionclienteFilter);        
        filters.addFilter(nropedidoFilter);        
        filters.addFilter(fechaFilter);
        filters.addFilter(estadopedidoFilter);
        filters.addFilter(observacionesFilter);
        filters.addFilter(prioridadFilter);
         
        grid.addPlugin(filters);                
        grid.addPlugin(sm);
        formbinding = new FormBinding(fp);
        formbinding.setStore(Pedidos.store);
        formbinding.addFieldBinding(new FieldBinding(id,"id"));
        formbinding.addFieldBinding(new ComboboxFieldBinding(cliente,"razonsocial"));
        formbinding.addFieldBinding(new FieldBinding(observaciones,"observaciones"));
        formbinding.addFieldBinding(new FieldBinding(numPedido,"nropedido"));
        formbinding.addFieldBinding(new FieldBinding(fecha,"fecha"));
        formbinding.addFieldBinding(new ComboboxFieldBinding(direccion,"direccion"));
	    formbinding.addFieldBinding(new ComboboxFieldBinding(epdescripcion,"epdescripcion"));
	    formbinding.addFieldBinding(new ComboboxFieldBinding(prdescripcion,"prdescripcion"));
		   
	    final PagingToolBar toolBarPag1 = new PagingToolBar(10);
        toolBarPag1.bind(DetallePedidos.loader);
        
        List<ColumnConfig> conf1 = new ArrayList<ColumnConfig>();
        CheckBoxSelectionModel<ModelData> sm1 = new CheckBoxSelectionModel<ModelData>();
    
        conf1.add(sm1.getColumn()); 
        ColumnConfig col1  = new ColumnConfig("codigo","Codigo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("codarticulo","Codigo Articulo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("descripcionarticulo","Desc. Articulo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("estadodetallepedido","Estado Detalle Pedido",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("cantidad","Cantidad",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("observaciones","Observaciones",300);
	    conf1.add(col1);
	   	    
	    final ColumnModel cm1 = new ColumnModel(conf1);
	    grid1 = new Grid<ModelData>(DetallePedidos.store, cm1);  
        grid1.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {  
          public void handleEvent(GridEvent<BeanModel> be) {  
        	  DetallePedidos.loader.load(0, 10);  
          }  
        }); 
        sm1.setSelectionMode(SelectionMode.SINGLE);
        grid1.setSelectionModel(sm1);
        grid1.getSelectionModel().addListener(Events.SelectionChange,
           new Listener<SelectionChangedEvent<ModelData>>() {
			@Override
			public void handleEvent(SelectionChangedEvent<ModelData> be) {		
			   if(be.getSelection().size()==0){
				   clearForm1();
                   formbinding1.unbind();
				   btnDeleteDetallePedido.setEnabled(false);
				   DetallePedidos.store.removeAll();
				 }
			   if(be.getSelection().size()==1){
				   formbinding1.bind((ModelData) be.getSelection().get(0));
	  	         //  selectedModel1 = be.getSelectedItem();
	  	            
				   btnDeleteDetallePedido.setEnabled(true);
				   selectedModel1 = be.getSelectedItem();
		           DetallePedidos.detallepedido_id = selectedModel1.get("id");
		          }
    		   if(be.getSelection().size()>1)
    			   btnDeleteDetallePedido.setEnabled(false);
    			   formbinding1.unbind();
			}
          });
        
        grid1.setLoadMask(true);  
        grid1.setBorders(true);       
        GridFilters filt    = new GridFilters();
        StringFilter coddp  = new StringFilter("codigo");        
        StringFilter cdart  = new StringFilter("codarticulo");        
        StringFilter desart = new StringFilter("descripcionarticulo");
        StringFilter estdp  = new StringFilter("estadodetallepedido");
        StringFilter cant   = new StringFilter("cantidad");
        StringFilter obser  = new StringFilter("observaciones");
          
        filt.addFilter(coddp);        
        filt.addFilter(cdart);        
        filt.addFilter(desart);        
        filt.addFilter(estdp);        
        filt.addFilter(cant);
        filt.addFilter(obser);
         
        grid1.addPlugin(filt);                
        grid1.addPlugin(sm1);
        formbinding1 = new FormBinding(f);
        formbinding1.setStore(DetallePedidos.store);
        formbinding1.addFieldBinding(new FieldBinding(idf,"id"));
        formbinding1.addFieldBinding(new FieldBinding(codigof,"codigo"));
        formbinding1.addFieldBinding(new FieldBinding(id,"pedido_id"));
        formbinding1.addFieldBinding(new ComboboxFieldBinding(recetaf,"descripcionarticulo"));
	    formbinding1.addFieldBinding(new ComboboxFieldBinding(edpedidof,"estadodetallepedido"));
	    formbinding1.addFieldBinding(new FieldBinding(cantidadf,"cantidad"));
	    formbinding1.addFieldBinding(new FieldBinding(obsf,"observaciones"));
	          
        cpi.setTopComponent(toolbar());
        cpi.add(grid,c);
		cpi.setBottomComponent(toolBarPag);		
   
		cpg.setTopComponent(toolbar1());
		cpg.add(grid1,cg);
	    cpg.setBottomComponent(toolBarPag1);
	
		ctp.add(cpi,nor);
		ctp.add(cpg,cen);
		
		cpe.add(cpw,nor);
		cpe.add(cpf,cen);
		
        add(ctp,center);
	    add(cpe,east);
	    
	}
   
    
   public ToolBar toolbar(){
	  toolBar = new ToolBar(); 
      btnDeletePedido = new Button("Eliminar", IconHelper.createPath("images/icons/delete.gif"));
      btnDeletePedido.setEnabled(false);
      toolBar.add(btnDeletePedido);
      btnDeletePedido.addSelectionListener(new SelectionListener<ButtonEvent>(){
   	  public void componentSelected(ButtonEvent ce){
	    if(id.getValue() != null){	 
	      Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
		   public void handleEvent(MessageBoxEvent be) {
            if(be.getButtonClicked().getItemId().equals(Dialog.YES)) { 
		        Pedidos.eliminar(Integer.parseInt(id.getValue()));
			    Pedidos.loader.load();
	         }
            }
	      };
	       String msg = "Esta seguro que desea eliminar al Cliente?";
	       MessageBox.confirm(x.eliminarCliente(), msg, callback);
	 	  }else{
		   MessageBox.alert(x.seleccionar(), "Seleccione una fila porfavor", null);
	      }
		 }
	  });
     return toolBar;
    }
   
	  public ToolBar toolbar1(){
		toolBar1 = new ToolBar();
		btnDeleteDetallePedido = new Button("Eliminar",IconHelper.createPath("images/icons/delete.gif"));
		btnDeleteDetallePedido.setEnabled(false);
		toolBar1.add(btnDeleteDetallePedido);
		btnDeleteDetallePedido.addSelectionListener(new SelectionListener<ButtonEvent>(){
		  public void componentSelected(ButtonEvent ce){
			    Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
				  public void handleEvent(MessageBoxEvent be) {
		           if (be.getButtonClicked().getItemId().equals(Dialog.YES)) { 
				        DetallePedidos.eliminar(DetallePedidos.detallepedido_id);
					    DetallePedidos.loader.load();
			         }
		           }
			     };
			     String msg = "Esta seguro que desea eliminar esta direccion del Cliente?";
			     MessageBox.confirm("Eliminar Direccion Cliente?", msg, callback);
			 }
		   });
	   return toolBar1;
	 }
	
	public ButtonBar buttonForm(){
	  ButtonBar bb = new ButtonBar();
	  btnGuardar = new Button("Guardar",IconHelper.createPath("images/icons/save_all.png"));		  
	  btnGuardar.addSelectionListener(new SelectionListener<ButtonEvent>(){
		public void componentSelected(ButtonEvent ve){
		 System.out.println("antes del if..."+id.getValue()+idcliente+","+iddireccioncliente+","+idestadopedido+","+idprioridad);
		
	     if(validarForm()&& validarIdsForm()){  
	    	System.out.println("iddireccioncliente..."+idcliente+","+iddireccioncliente+","+idestadopedido+","+idprioridad);
	        final Pedido p = new Pedido();
	        p.setNropedido(numPedido.getValue());
		    p.setCliente_id(Integer.parseInt(idcliente));
		    p.setDireccioncliente_id(iddireccioncliente);
            p.setFecha(fecha.getValue());
		    p.setEstadopedido_id(idestadopedido);
		    p.setObservaciones(observaciones.getValue());
		    p.setPrioridad_id(idprioridad);
            
		 if(id.getValue() == null){
			p.setUltimonumero(0); 
		    Pedidos.guardar(p);
	        Pedidos.loader.load();
	        clearForm();
	      }
	     if(id.getValue() != null){
		 Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
		  public void handleEvent(MessageBoxEvent be) {
		    if(be.getButtonClicked().getItemId().equals(Dialog.YES)) {  
		       p.setId(Integer.parseInt(id.getValue()));
		       Pedidos.actualizar(p);
		       Pedidos.loader.load();
			  }
			}
	      };
	      String msg = "Esta seguro que desea Actualizar el Cliente?";
	      MessageBox.confirm("Actualizar Cliente?", msg, callback);
	 	  }
        }
	   }
      });

	  HorizontalAlignment align =  HorizontalAlignment.CENTER;
	  bb.add(btnGuardar);
	  bb.setAlignment(align);
	  return bb;
	  }
	
   public void inicializardireccion(){
	 direccion.clear();
	 iddireccioncliente=null;
   }
	 
   public void formulario(){
    	fp = new FormPanel();
		fp.setHeaderVisible(false);
		fp.setFrame(true);
		id = new HiddenField<String>();
		id.setVisible(false);
		numPedido = new TextField<String>();
		numPedido.setFieldLabel(x.codigopedido());
		numPedido.setEnabled(false);
		Clientes.loaderCombo.load();
		cliente = new ComboBox<ModelData>();  
		cliente.setEmptyText("Select a state...");  
		cliente.setAllowBlank(false);
		cliente.setDisplayField("razonsocial");  
		cliente.setFieldLabel(x.clientepedido());
		cliente.setWidth(150);  
		cliente.setStore(Clientes.storeCombo);
		cliente.setValueField("razonsocial");
		cliente.setTypeAhead(true);  
		cliente.setTriggerAction(TriggerAction.ALL); 
		cliente.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
		  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
			  inicializardireccion();
			 if(cliente.getValue()!=null){ 
		   	   idcliente = cliente.getValue().get("id").toString();
        	   DireccionClientes.cliente_id = Integer.parseInt(idcliente);
               DireccionClientes.loaderDireccionCliente.load();             
              }
     		}
		});
		System.out.println("entro en la segunda parte...");
		DireccionClientes.loaderDireccionCliente.load();
		direccion = new ComboBox<ModelData>();  
		direccion.setEmptyText("Select a state...");  
		direccion.setAllowBlank(true);
		direccion.setDisplayField("direccion");  
		direccion.setFieldLabel(x.direccioncliente());
		direccion.setWidth(150);  
	    direccion.setStore(DireccionClientes.storeDireccionCliente);
		direccion.setValueField("direccion");
		direccion.setTypeAhead(true);  
		direccion.setTriggerAction(TriggerAction.ALL); 
        direccion.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
		  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
     	    if(direccion.getValue()!=null){ 
     		  iddireccioncliente = Integer.parseInt(direccion.getValue().get("id").toString());
			 }
    	  }
		});	
		
		fecha = new DateField();
		fecha.setName("fecha");
		fecha.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
		fecha.setAllowBlank(false);
		fecha.setFieldLabel(x.fecha());
		fecha.setValue(new Date());
		EstadoPedidos.loader.load();
		epdescripcion = new ComboBox<ModelData>();
		epdescripcion.setEditable(false);
		epdescripcion.setFieldLabel(x.estado());
		epdescripcion.setDisplayField("descripcion");  
		epdescripcion.setEmptyText("Select a state...");  
		epdescripcion.setWidth(150);  
		epdescripcion.setStore(EstadoPedidos.store);
		epdescripcion.setTypeAhead(true);  
		epdescripcion.setTriggerAction(TriggerAction.ALL); 
		epdescripcion.setValueField("descripcion");
		epdescripcion.setAllowBlank(false);
		epdescripcion.setUseQueryCache(false);
        epdescripcion.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
		  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
			if(epdescripcion.getValue()!=null){   
     		  idestadopedido = Integer.parseInt(epdescripcion.getValue().get("id").toString());
     		  }
			 }
		});	
		observaciones = new TextArea();
		observaciones.setFieldLabel(x.observacion());
		
		Prioridades.loader.load();
		prdescripcion = new ComboBox<ModelData>();
		prdescripcion.setEmptyText("Select a state...");  
		prdescripcion.setAllowBlank(false);
		prdescripcion.setDisplayField("descripcion");  
		prdescripcion.setFieldLabel(x.prioridad());
		prdescripcion.setWidth(150);  
		prdescripcion.setStore(Prioridades.store);
		prdescripcion.setValueField("descripcion");
		prdescripcion.setTypeAhead(true);  
		prdescripcion.setTriggerAction(TriggerAction.ALL); 
		prdescripcion.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
		  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
     		if(prdescripcion.getValue()!=null){   
			   idprioridad = Integer.parseInt(prdescripcion.getValue().get("id").toString());
			  }
			}
		});	
		
		fp.add(id);	
		fp.add(numPedido);
		fp.add(cliente);
		fp.add(direccion);
		fp.add(fecha);
		fp.add(epdescripcion);
		fp.add(observaciones);
		fp.add(prdescripcion);
		fp.add(buttonForm());
	}
	
   public void clearForm(){
	 fp.clear();
    }
   
   public boolean validarForm(){
	 //return fp.isValid();
	 boolean i  = id.isValid();
	 boolean n  = numPedido.isValid();
	 boolean c  = cliente.isValid();
	// boolean d  = direccion.isValid();
	 boolean f  = fecha.isValid();
	 boolean ep = epdescripcion.isValid();
	// boolean o  = observaciones.isValid();
 	 boolean p  = prdescripcion.isValid();
 	 return i&&n&&c&&f&&ep&&p;
    }
   
   public boolean validarIdsForm(){
	  boolean var = false;
	  Integer cl  = cliente.getValue().get("id");
	 // Integer dr  = direccion.getValue().get("id");
	  Integer epd = epdescripcion.getValue().get("id");
	  Integer prd = prdescripcion.getValue().get("id");
	  if(cl!=null && epd!=null&&prd!=null)
		  var = true;
	 return var;
   }
   
   public void clearForm1(){
	   f.clear();
   }
   
   public boolean validarForm1(){
	   return f.isValid();
   }
  
   public boolean validarIdsForm1(){
	boolean var = false; 
	Integer idp=null,rec=null,edp=null;
	idp = DetallePedidos.pedido_id;
	//idp = Integer.parseInt(id.getValue().toString());
	//rec = recetaf.getValue().get("id");
	rec = idrecf;
	edp = edpedidof.getValue().get("id");
	if(rec!=null&&edp!=null&&idp!=null)
	  var=true;
	return var;
   }
   
   public String UltimoNumeroPedido(){
	 String var=null,valor=null;
	 ultimonumeropedido = ultimonumeropedido+1; 
	 System.out.println("string ultimonumeropedido"+ultimonumeropedido);
	 var = ""+ultimonumeropedido;
	   if(var.length()==1)
	     valor = "0".concat(var);
	   if(var.length()==2)
		 valor = var;
	  nombredetallepedido = codigopedido.concat("-").concat(valor);  
	   
     return valor;
   }
   
   public ButtonBar buttonForm1(){
    ButtonBar bb = new ButtonBar();
    btnGuardar = new Button("Guardar",IconHelper.createPath("images/icons/save_all.png"));		  
    btnGuardar.addSelectionListener(new SelectionListener<ButtonEvent>(){
	public void componentSelected(ButtonEvent ve){
     if(validarForm1()&&validarIdsForm1()){  
	   final DetallePedido dp = new DetallePedido();
	   dp.setPedido_id(DetallePedidos.pedido_id);//(Integer.parseInt(id.getValue()));
	   dp.setArticulo_id(idrecf);//Integer.parseInt(artf.getValue().get("id").toString()));
	   dp.setEstadodetallepedido_id(Integer.parseInt(edpedidof.getValue().get("id").toString()));
	   dp.setCantidad(Double.parseDouble(cantidadf.getValue().toString()));
	   dp.setObservaciones(obsf.getValue());
	   dp.setCodigo(UltimoNumeroPedido());
	   dp.setNombre(nombredetallepedido);
	  
	 if(idf.getValue() == null){
	   Pedido ped = new Pedido();
	   ped.setId(DetallePedidos.pedido_id);//(Integer.parseInt(id.getValue()));
	   ped.setUltimonumero(ultimonumeropedido);
	   Pedidos.actualizarUltNro(ped);	 
       DetallePedidos.guardar(dp);
       DetallePedidos.loader.load();
       clearForm1();
     }
     if(idf.getValue() != null){
	  Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
	  public void handleEvent(MessageBoxEvent be) {
	    if(be.getButtonClicked().getItemId().equals(Dialog.YES)) {  
	       dp.setId(Integer.parseInt(idf.getValue()));
	       DetallePedidos.actualizar(dp);
		   DetallePedidos.loader.load();
		  }
		}
      };
      String msg = "Esta seguro que desea Actualizar el Cliente?";
      MessageBox.confirm("Actualizar Cliente?", msg, callback);
 	    }
       }
      }
     });

     HorizontalAlignment align =  HorizontalAlignment.CENTER;
     bb.add(btnGuardar);
     bb.setAlignment(align);
    return bb;
  }
   
    public void Form(){
      f = new FormPanel();
	  f.setHeaderVisible(false);
	  f.setFrame(true);
	  idf = new HiddenField<String>();
	  idf.setVisible(false);
	  codigof = new TextField<String>();
	  codigof.setFieldLabel(x.codigo());
	  codigof.setEnabled(false);
	  recetaf = new ComboBox<ModelData>();
	  recetaf.setEmptyText("Select a state...");  
	  recetaf.setAllowBlank(false);
	  recetaf.setDisplayField("artdescripcion");  
	  recetaf.setFieldLabel(x.receta());
	  recetaf.setWidth(150);  
	  recetaf.setStore(Recetas.storeCombo);
	  recetaf.setValueField("artdescripcion");
	  recetaf.setTypeAhead(true);  
	  recetaf.setTriggerAction(TriggerAction.ALL); 
	  recetaf.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
	    public void selectionChanged(SelectionChangedEvent<ModelData> se) {
	     if(recetaf.getValue()!=null){	
 		  idrecf  = Integer.parseInt(recetaf.getValue().get("articulopadre_id").toString());
 		  System.out.println("el id de la receta es.... "+idrecf);
 		  }
         }
	  });	
	  EstadoDetallePedidos.loader.load();
	  edpedidof = new ComboBox<ModelData>();
	  edpedidof.setEmptyText("Select a state...");  
	  edpedidof.setAllowBlank(false);
	  edpedidof.setDisplayField("descripcion");  
	  edpedidof.setFieldLabel(x.estado());
	  edpedidof.setWidth(150);  
	  edpedidof.setStore(EstadoDetallePedidos.store);
	  edpedidof.setValueField("descripcion");
	  edpedidof.setTypeAhead(true);  
	  edpedidof.setTriggerAction(TriggerAction.ALL); 
	  edpedidof.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
		public void selectionChanged(SelectionChangedEvent<ModelData> se) {
		 if(edpedidof.getValue()!=null){
     	  idedpf = Integer.parseInt(edpedidof.getValue().get("id").toString());
		   }
          }
		});
      cantidadf = new NumberField();
      cantidadf.setFieldLabel(x.cantidad());
	  obsf = new TextArea();
	  obsf.setFieldLabel(x.observacion());

      f.add(idf);
      f.add(codigof);
	  f.add(recetaf,new FormData("-20"));
	  f.add(edpedidof,new FormData("-20"));
	  f.add(cantidadf,new FormData("-20"));
	  f.add(obsf,new FormData("-20"));
	  f.add(buttonForm1(),new FormData("-20"));
   }
      
}